In storage systems, error correcting codes (ECC) are used to ensure user data can be written to and read back from a noisy channel by adding redundancy to user data. When error correction encoded data is obtained from the channel (e.g., by reading back from storage), the information is decoded and one of three results can occur: corrected, uncorrected, or miscorrected. The table below describes the three states corresponding to these results:
Decoder was able toDecoder was unable tosuccessfully decodesuccessfully decodeencoded informationencoded informationDecoded data is desired dataCorrectedUncorrectedDecoded data is not desiredMiscorrecteddata
An uncorrected result in some applications is acceptable since the data can be re-read and re-processed until corrected data is returned. A miscorrected result is undesirable because the decoded data is not the desired data, but it successfully passes the ECC detection criterion. That is, the system thinks it has decoded the data properly, but the returned data is not what is expected or was requested. In some cases, miscorrected data can crash a computer system. It would be desirable to develop techniques that address the miscorrected scenario.